package com.jl.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jl.commons.excel.DeviceExcel;
import com.jl.commons.result.DeviceRunStatus;
import com.jl.commons.result.PageDataInfo;
import com.jl.commons.shiro.ShiroUser;
import com.jl.model.Device;
import com.jl.model.in.DeviceIn;
import com.jl.model.in.ProductionLineDevice;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备表 服务类
 * </p>
 *
 * @author JiangJian
 * @since 2019-03-06
 */
public interface IDeviceService extends IService<Device> {

    /**
     * 分页查询设备信息数据
     * @param pageDataInfo 分页配置信息
     * @param qw 筛选条件
     * @return
     */
    void selectDeviceDataGrid(PageDataInfo<Map<String,Object>> pageDataInfo, QueryWrapper<Device> qw);

    /**
     *批量删除设备信息
     * 删除设备信息的同时需要删除device_component中的数据信息
     * @param ids
     * @return
     */
    boolean deleteDeviceByIds(List<Long> ids);

    /**
     * 获得设备运行状态评价信息(本周或本月)
     * @param deviceId 设备id
     * @param type 类型 1本周，2本月
     * @return
     */
    DeviceRunStatus getDeviceStatus(Long deviceId,Integer type,String time);

    /**
     * 获取生产线上的设备运行信息
     * @param lineId 生产线id
     * @return
     */
    List<ProductionLineDevice> getLineDeviceRunInfo(Long lineId);

    /**
     * 新增设备信息 同步插入该设备所有的部位的配件到device_component表中
     * @param currUser
     * @param device
     * @return
     */
    boolean saveDeviceWithModel(ShiroUser currUser, Device device);

    /**
     * 编辑设备信息 同步修改该设备所有的部位的配件到device_component表中
     * @param currUser
     * @param device
     * @return
     */
    boolean updateDeviceWithModel(ShiroUser currUser, Device device);


    /**
     * 导出excel设备信息
     * @param ids ids
     * @return
     */
    List<DeviceExcel> selectDeviceExcelByIds(List<Long> ids);
    /**
     * 设备编号是否已经使用
     * @param number 编号
     * @return true false
     */
    boolean isDeviceNumberUsed(String number);

    boolean isDeviceNumberCanUse(String number,Long deviceId);

    DeviceIn selectDeviceInById(Long deviceId);


    /**
     * 获取某月发生重复故障的设备信息
     * @param startTime 201905
     * @param endTime 201905
     * @return
     */
    void getRepeatDamageDeviceInMonth(PageDataInfo<Map<String,Object>> pageDataInfo,String startTime,String endTime);

    /***********************统计代码*********************/


    /**
     * 获得故障时间最多的设备信息
     * @param pageDataInfo 分页参数
     * @param type 1 周 2 月
     * @param startTime 起始时间
     * @param endTime  结束时间
     */
    void getTopFaultTimeDevice(PageDataInfo<Map<String,Object>> pageDataInfo, Integer type, String startTime, String endTime);


    /**
     * 获得故障次数最多的设备信息
     * @param pageDataInfo 分页参数
     * @param type 1 周 2月
     * @param startTime 起始时间
     * @param endTime 结束时间
     */
    void getTopFaultCountDevice(PageDataInfo<Map<String,Object>> pageDataInfo, Integer type, String startTime, String endTime);

    /**
     * 获得故障时间超过两个小时的次数的设备信息
     * @param pageDataInfo 分页参数
     * @param type 1 周 2月
     * @param startTime 起始时间
     * @param endTime 结束时间
     */
    void getTopOverHourCountDevice(PageDataInfo<Map<String,Object>> pageDataInfo, Integer type, String startTime, String endTime);


}
